package wxg.test.exception.a01;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class ClazzA {

	/**
	 * 
java.lang.ArithmeticException: / by zero


程序会执行到这里吗?程序出现异常会返回flase吗?
	at ClazzA.funcA(ClazzA.java:7)
	at TestTryCatch.main(TestTryCatch.java:5)
in clazz TestTryCatch , flag is false
	 * 
	 * 以上是程序执行结果!
	 * 1) 捕获异常,在catch中可以设置flag的值,并且能够返回
	 * 2) catch之后的语句也都是执行的!!! 这里就很重要了: 
	 * 也许在一些情况下,应该为catch后面的语句加上限制: if(flag){...}
	 * 3) `int a = 10/0;`之后的语句没有执行!
	 * @return
	 */
	public boolean funcA(){
		boolean flag = true;
		try {
			int a = 10/0;
			System.out.println(a);
		} catch (Exception e) {
			flag = false;
			e.printStackTrace();
		}
		System.out.println("\n\n程序会执行到这里吗?程序出现异常会返回flase吗?");
		return flag;
	}
	
	/**
	 * 
java.io.FileNotFoundException: aa.txt (系统找不到指定的文件。)
	at java.io.FileInputStream.open0(Native Method)
	at java.io.FileInputStream.open(FileInputStream.java:195)
	at java.io.FileInputStream.<init>(FileInputStream.java:138)
	at wxg.test.exception.a01.ClazzA.funcB(ClazzA.java:43)
	at wxg.test.exception.a01.TestTryCatch.main(TestTryCatch.java:11)


程序会执行到这里吗?程序出现异常会返回flase吗?
in clazz TestTryCatch , flag is false
	 * 
	 * 以上是程序执行结果!
	 * 测试同`funcA`一致
	 * 
	 * @return
	 */
	public boolean funcB(){
		boolean flag = true;
		FileInputStream fi = null;
		try {
			fi = new FileInputStream(new File("aa.txt"));
			int a = fi.read();
			System.out.println("\n程序会执行这里的输出吗?");
			System.out.println( a );
		} catch (Exception e) {
			flag = false;
			e.printStackTrace();
		} finally {
			if(null != fi){
				try {
					fi.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		System.out.println("\n\n程序会执行到这里吗?程序出现异常会返回flase吗?");
		return flag;
	}
	
	/**
	 * 
java.lang.ArithmeticException: / by zero
	at wxg.test.exception.a01.ClazzA.funcC(ClazzA.java:84)
	at wxg.test.exception.a01.TestTryCatch.main(TestTryCatch.java:16)

已经确定程序会执行到这里, flag : false
in clazz TestTryCatch , flag is false
	 * 
	 * 以上是程序执行结果!
	 * 是对`funcA`,`funcB`的补充！
	 * 
	 * @return
	 */
	public boolean funcC(){
		boolean flag = true;
		try {
			int a = 10/0;
			System.out.println(a);
		} catch (Exception e) {
			flag = false;
			e.printStackTrace();
		}
		if(flag){
			System.out.println(String.format("\n已经确定程序会执行到这里, flag : %s", flag));
		}else{
			System.out.println(String.format("\n已经确定程序会执行到这里, flag : %s", flag));
		}
		return flag;
	}
}
